<!doctype html>
<html lang="en-us">
<head>

    <meta charset="utf-8">
    <meta name="generator" content="Hugo 0.59.1" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <title>阿里云视频点播服务前后端实现 | 林贤钦</title>
    <meta property="og:title" content="阿里云视频点播服务前后端实现 - 林贤钦">
    <meta property="og:type" content="article">
        
    <meta property="article:published_time" content="2020-04-15T19:59:47&#43;08:00">
        
        
    <meta property="article:modified_time" content="2020-04-15T19:59:47&#43;08:00">
        
    <meta name="Keywords" content="java,博客,项目管理,软件架构,公众号,小程序">
    <meta name="description" content="阿里云视频点播服务前后端实现">
        
    <meta name="author" content="林贤钦">
    <meta property="og:url" content="http://linxianqin.gitee.io/post/%E9%98%BF%E9%87%8C%E4%BA%91%E8%A7%86%E9%A2%91%E7%82%B9%E6%92%AD%E6%9C%8D%E5%8A%A1/">
    <link rel="shortcut icon" href="/img/favicon.ico" type="image/x-icon">

    <link rel="stylesheet" href="/css/normalize.css">
    
        <link rel="stylesheet" href="/css/prism.css">
    
    <link rel="stylesheet" href="/css/style.css">
    <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>

    


    
    
</head>

<body>
<header id="header" class="clearfix">
	<div class="container">
        <div class="col-group">
            <div class="site-name ">
                
                    <a id="logo" href="http://linxianqin.gitee.io">
                        林贤钦
                    </a>
                
                <p class="description">专注于Java、微信小程序、移动互联网、项目管理、软件架构</p>
            </div>
            <div>
                <nav id="nav-menu" class="clearfix">
                    <a class="current" href="http://linxianqin.gitee.io">首页</a>
                    
                    <a  href="http://linxianqin.gitee.io/archives/" title="归档">归档</a>
                    
                    <a  href="http://linxianqin.gitee.io/about/" title="关于">关于</a>
                    
                </nav>
            </div>
        </div>
    </div>
</header>


<div id="body">
        
        
    <div class="container">
        <div class="col-group">

            <div class="col-8" id="main">
                <div class="res-cons">
                    <article class="post">
                        <header>
                            <h1 class="post-title">阿里云视频点播服务前后端实现</h1>
                        </header>
                        <date class="post-meta meta-date">
                            2020年4月15日
                        </date>
                        
                        <div class="post-meta">
                            <span>|</span>
                            
                                <span class="meta-category"><a href="http://linxianqin.gitee.io/categories/java">java</a></span>
                            
                                <span class="meta-category"><a href="http://linxianqin.gitee.io/categories/%E9%98%BF%E9%87%8C%E4%BA%91">阿里云</a></span>
                            
                                <span class="meta-category"><a href="http://linxianqin.gitee.io/categories/vue">vue</a></span>
                            
                        </div>
                        
                        
                        <div class="post-meta">
                            <span id="busuanzi_container_page_pv">|<span id="busuanzi_value_page_pv"></span><span> 阅读</span></span>
                        </div>
                        
                        
                        <div class="post-content">
							<nav id="TableOfContents">
<ul>
<li><a href="#一-阿里云视频点播技术能力盘点">一、阿里云视频点播技术能力盘点</a>
<ul>
<li><a href="#1-应用场景">1、应用场景</a></li>
<li><a href="#2-功能介绍">2、功能介绍</a></li>
<li><a href="#3-整体流程">3、整体流程</a></li>
</ul></li>
<li><a href="#二-服务端sdk">二、服务端SDK</a>
<ul>
<li><a href="#1-简介">1、简介</a></li>
<li><a href="#2-功能介绍-1">2、功能介绍</a></li>
<li><a href="#3-使用sdk">3、使用SDK</a>
<ul>
<li><a href="#3-1-安装">3.1、安装</a></li>
<li><a href="#3-2-初始化">3.2、初始化</a></li>
</ul></li>
<li><a href="#4-创建测试用例">4、创建测试用例</a>
<ul>
<li><a href="#4-1-获取视频播放凭证">4.1、<strong>获取视频播放凭证</strong></a></li>
<li><a href="#4-2-获取视频播放地址">4.2、获取视频播放地址</a></li>
</ul></li>
</ul></li>
<li><a href="#三-安装sdk">三、安装SDK</a>
<ul>
<li><a href="#1-配置pom">1、配置pom</a></li>
<li><a href="#2-安装非开源jar包">2、安装非开源jar包</a>
<ul>
<li>
<ul>
<li><a href="#附上jar包">附上jar包：</a></li>
</ul></li>
</ul></li>
</ul></li>
</ul>
</nav>
                            

<h1 id="一-阿里云视频点播技术能力盘点">一、阿里云视频点播技术能力盘点</h1>

<p><strong>参考文章：</strong></p>

<p><a href="https://blog.csdn.net/qq_33857573/article/details/79564255">https://blog.csdn.net/qq_33857573/article/details/79564255</a></p>

<p>视频点播（ApsaraVideo for VoD）是集音视频采集、编辑、上传、自动化转码处理、媒体资源管理、分发加速于一体的一站式音视频点播解决方案。</p>

<p><img src="../img/aliyun/阿里云视频点播特点.png" alt="阿里云视频点播特点" /></p>

<h2 id="1-应用场景">1、应用场景</h2>

<ul>
<li>音视频网站：无论是初创视频服务企业，还是已拥有海量视频资源，可定制化的点播服务帮助客户快速搭建拥有极致观看体验、安全可靠的视频点播应用。</li>
<li>短视频：集音视频拍摄、特效编辑、本地转码、高速上传、自动化云端转码、媒体资源管理、分发加速、播放于一体的完整短视频解决方案。目前已帮助1000+APP快速实现手机短视频功能。</li>
<li>直播转点播：将直播流同步录制为点播视频，用于回看。并支持媒资管理、媒体处理（转码及内容审核/智能首图等AI处理）、内容制作（云剪辑）、CDN分发加速等一系列操作。</li>
<li>在线教育：为在线教育客户提供简单易用、安全可靠的视频点播服务。可通过控制台/API等多种方式上传教学视频，强大的转码能力保证视频可以快速发布，覆盖全网的加速节点保证学生观看的流畅度。防盗链、视频加密等版权保护方案保护教学内容不被窃取。</li>
<li>视频生产制作：提供在线可视化剪辑平台及丰富的OpenAPI，帮助客户高效处理、制作视频内容。除基础的剪切拼接、混音、遮标、特效、合成等一系列功能外，依托云剪辑及点播一体化服务还可实现标准化、智能化剪辑生产，大大降低视频制作的槛，缩短制作时间，提升内容生产效率。</li>
<li>内容审核：应用于短视频平台、传媒行业审核等场景，帮助客户从从语音、文字、视觉等多维度精准识别视频、封面、标题或评论的违禁内容进行AI智能审核与人工审核。</li>
</ul>

<h2 id="2-功能介绍">2、功能介绍</h2>

<p><img src="../img/aliyun/阿里云视频点播功能介绍.png" alt="阿里云视频点播功能介绍" /></p>

<h2 id="3-整体流程">3、整体流程</h2>

<p>使用视频点播实现音视频上传、存储、处理和播放的整体流程如下：</p>

<p><img src="../img/aliyun/阿里云视频点播整体流程.png" alt="阿里云视频点播整体流程" /></p>

<ul>
<li>用户获取上传授权。</li>
<li>VoD下发 上传地址和凭证 及 VideoId。</li>
<li>用户上传视频保存视频ID(VideoId)。</li>
<li>用户服务端获取播放凭证。</li>
<li>VoD下发带时效的播放凭证。</li>
<li>用户服务端将播放凭证下发给客户端完成视频播放。</li>
</ul>

<h1 id="二-服务端sdk">二、服务端SDK</h1>

<h2 id="1-简介">1、简介</h2>

<p>sdk的方式将api进行了进一步的封装，不用自己创建工具类。</p>

<p>我们可以基于服务端SDK编写代码来调用点播API，实现对点播产品和服务的快速操作。</p>

<h2 id="2-功能介绍-1">2、功能介绍</h2>

<ul>
<li>SDK封装了对API的调用请求和响应，避免自行计算较为繁琐的 API签名。</li>
<li>支持所有点播服务的API，并提供了相应的示例代码。</li>
<li>支持7种开发语言，包括：Java、Python、PHP、.NET、Node.js、Go、C/C++。</li>
<li>通常在发布新的API后，我们会及时同步更新SDK，所以即便您没有找到对应API的示例代码，也可以参考旧的示例自行实现调用。</li>
</ul>

<h2 id="3-使用sdk">3、使用SDK</h2>

<h3 id="3-1-安装">3.1、安装</h3>

<p>参考文档：<a href="https://help.aliyun.com/document_detail/57756.html">https://help.aliyun.com/document_detail/57756.html</a></p>

<p>添加maven仓库的配置和依赖到pom</p>

<pre><code class="language-xml">&lt;repositories&gt;
    &lt;repository&gt;
        &lt;id&gt;sonatype-nexus-staging&lt;/id&gt;
        &lt;name&gt;Sonatype Nexus Staging&lt;/name&gt;
        &lt;url&gt;https://oss.sonatype.org/service/local/staging/deploy/maven2/&lt;/url&gt;
        &lt;releases&gt;
            &lt;enabled&gt;true&lt;/enabled&gt;
        &lt;/releases&gt;
        &lt;snapshots&gt;
            &lt;enabled&gt;true&lt;/enabled&gt;
        &lt;/snapshots&gt;
    &lt;/repository&gt;
&lt;/repositories&gt;
</code></pre>

<pre><code class="language-xml"> &lt;dependency&gt;
    &lt;groupId&gt;com.aliyun&lt;/groupId&gt;
    &lt;artifactId&gt;aliyun-java-sdk-core&lt;/artifactId&gt;
    &lt;version&gt;4.3.3&lt;/version&gt;
  &lt;/dependency&gt;
  &lt;dependency&gt;
    &lt;groupId&gt;com.aliyun&lt;/groupId&gt;
    &lt;artifactId&gt;aliyun-java-sdk-vod&lt;/artifactId&gt;
    &lt;version&gt;2.15.5&lt;/version&gt;
  &lt;/dependency&gt;
  &lt;dependency&gt;
    &lt;groupId&gt;com.google.code.gson&lt;/groupId&gt;
    &lt;artifactId&gt;gson&lt;/artifactId&gt;
    &lt;version&gt;2.8.2&lt;/version&gt;
  &lt;/dependency&gt;
</code></pre>

<h3 id="3-2-初始化">3.2、初始化</h3>

<p>参考文档：<a href="https://help.aliyun.com/document_detail/61062.html">https://help.aliyun.com/document_detail/61062.html</a></p>

<p>根据文档示例创建 AlyVodSDKUtils.java</p>

<pre><code class="language-java">public class AlyVodSDKUtils {
    public static DefaultAcsClient initVodClient(String accessKeyId, String accessKeySecret) throws ClientException {
        String regionId = &quot;cn-shanghai&quot;;  // 点播服务接入区域
        DefaultProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);
        DefaultAcsClient client = new DefaultAcsClient(profile);
        return client;
    }
}
</code></pre>

<h2 id="4-创建测试用例">4、创建测试用例</h2>

<p>参考文档：<a href="https://help.aliyun.com/document_detail/61064.html">https://help.aliyun.com/document_detail/61064.html</a></p>

<h3 id="4-1-获取视频播放凭证">4.1、<strong>获取视频播放凭证</strong></h3>

<p>根据文档中的代码，修改如下</p>

<pre><code class="language-java">@Test
public void TestGetVideoPlayAuth() throws ClientException {
    //初始化客户端、请求对象和相应对象
    DefaultAcsClient client = AliyunVodSDKUtils.initVodClient(accessKeyId, accessKeySecret);
    GetVideoPlayAuthRequest request = new GetVideoPlayAuthRequest();
    GetVideoPlayAuthResponse response = new GetVideoPlayAuthResponse();
    try {
        //设置请求参数
        request.setVideoId(&quot;视频ID&quot;);
        //获取请求响应
        response = client.getAcsResponse(request);
        //输出请求结果
        //播放凭证
        System.out.print(&quot;PlayAuth = &quot; + response.getPlayAuth() + &quot;\n&quot;);
        //VideoMeta信息
        System.out.print(&quot;VideoMeta.Title = &quot; + response.getVideoMeta().getTitle() + &quot;\n&quot;);
    } catch (Exception e) {
        System.out.print(&quot;ErrorMessage = &quot; + e.getLocalizedMessage());
    }
    System.out.print(&quot;RequestId = &quot; + response.getRequestId() + &quot;\n&quot;);
}
</code></pre>

<h3 id="4-2-获取视频播放地址">4.2、获取视频播放地址</h3>

<pre><code class="language-java">@Test
public void testGetPlayInfo() throws ClientException {
    //初始化客户端、请求对象和相应对象
    DefaultAcsClient client = AliyunVodSDKUtils.initVodClient(accessKeyId, accessKeySecret);
    GetPlayInfoRequest request = new GetPlayInfoRequest();
    GetPlayInfoResponse response = new GetPlayInfoResponse();
    try {
        //设置请求参数
        //注意：这里只能获取非加密视频的播放地址
        request.setVideoId(&quot;视频ID&quot;);
        //获取请求响应
        response = client.getAcsResponse(request);
        //输出请求结果
        List&lt;GetPlayInfoResponse.PlayInfo&gt; playInfoList = response.getPlayInfoList();
        //播放地址
        for (GetPlayInfoResponse.PlayInfo playInfo : playInfoList) {
            System.out.print(&quot;PlayInfo.PlayURL = &quot; + playInfo.getPlayURL() + &quot;\n&quot;);
        }
        //Base信息
        System.out.print(&quot;VideoBase.Title = &quot; + response.getVideoBase().getTitle() + &quot;\n&quot;);
    } catch (Exception e) {
        System.out.print(&quot;ErrorMessage = &quot; + e.getLocalizedMessage());
    }
    System.out.print(&quot;RequestId = &quot; + response.getRequestId() + &quot;\n&quot;);
}
</code></pre>

<h1 id="三-安装sdk">三、安装SDK</h1>

<h2 id="1-配置pom">1、配置pom</h2>

<pre><code class="language-xml">  &lt;dependency&gt;
        &lt;groupId&gt;com.aliyun&lt;/groupId&gt;
        &lt;artifactId&gt;aliyun-java-sdk-core&lt;/artifactId&gt;
        &lt;version&gt;4.3.3&lt;/version&gt;
    &lt;/dependency&gt;
    &lt;dependency&gt;
        &lt;groupId&gt;com.aliyun.oss&lt;/groupId&gt;
        &lt;artifactId&gt;aliyun-sdk-oss&lt;/artifactId&gt;
       &lt;version&gt;3.1.0&lt;/version&gt;
    &lt;/dependency&gt;
    &lt;dependency&gt;
        &lt;groupId&gt;com.aliyun&lt;/groupId&gt;
        &lt;artifactId&gt;aliyun-java-sdk-vod&lt;/artifactId&gt;
        &lt;version&gt;2.15.2&lt;/version&gt;
    &lt;/dependency&gt;
    &lt;dependency&gt;
        &lt;groupId&gt;com.alibaba&lt;/groupId&gt;
        &lt;artifactId&gt;fastjson&lt;/artifactId&gt;
        &lt;version&gt;1.2.28&lt;/version&gt;
    &lt;/dependency&gt;
    &lt;dependency&gt;
        &lt;groupId&gt;org.json&lt;/groupId&gt;
        &lt;artifactId&gt;json&lt;/artifactId&gt;
        &lt;version&gt;20170516&lt;/version&gt;
    &lt;/dependency&gt;
    &lt;dependency&gt;
        &lt;groupId&gt;com.google.code.gson&lt;/groupId&gt;
        &lt;artifactId&gt;gson&lt;/artifactId&gt;
        &lt;version&gt;2.8.2&lt;/version&gt;
    &lt;/dependency&gt;
</code></pre>

<h2 id="2-安装非开源jar包">2、安装非开源jar包</h2>

<pre><code>注意：以下列举出部分依赖jar包的版本，您可直接在您的项目中添加maven依赖，也可以将VODUploadDemo-java-1.4.12.zip包中的所有jar包引入您的项目中使用。其中，aliyun-java-vod-upload-1.4.12.jar 还未正式开源，请您直接引入jar包至您的项目中使用。
</code></pre>

<p>在本地Maven仓库中安装jar包：</p>

<p>下载视频上传SDK，解压，命令行进入lib目录，执行以下代码</p>

<pre><code>mvn install:install-file -DgroupId=com.aliyun -DartifactId=aliyun-sdk-vod-upload -Dversion=1.4.11 -Dpackaging=jar -Dfile=aliyun-java-vod-upload-1.4.11.jar
</code></pre>

<p>然后在pom中引入jar包</p>

<pre><code class="language-java">
&lt;dependency&gt;
    &lt;groupId&gt;com.aliyun&lt;/groupId&gt;
    &lt;artifactId&gt;aliyun-sdk-vod-upload&lt;/artifactId&gt;
    &lt;version&gt;1.4.11&lt;/version&gt;
&lt;/dependency&gt;
</code></pre>

<h4 id="附上jar包">附上jar包：</h4>

<p>链接: <a href="https://pan.baidu.com/s/1MUVaHxAtVg-FxoA6V6cI0A">https://pan.baidu.com/s/1MUVaHxAtVg-FxoA6V6cI0A</a> 提取码: wv72</p>

                        </div>
						 
                        
<div class="post-archive">
    <ul class="post-copyright">
        <li><strong>原文作者：</strong><a rel="author" href="http://linxianqin.gitee.io">林贤钦</a></li>
        <li style="word-break:break-all"><strong>原文链接：</strong><a href="http://linxianqin.gitee.io/post/%E9%98%BF%E9%87%8C%E4%BA%91%E8%A7%86%E9%A2%91%E7%82%B9%E6%92%AD%E6%9C%8D%E5%8A%A1/">http://linxianqin.gitee.io/post/%E9%98%BF%E9%87%8C%E4%BA%91%E8%A7%86%E9%A2%91%E7%82%B9%E6%92%AD%E6%9C%8D%E5%8A%A1/</a></li>
        <li><strong>版权声明：</strong>本作品采用<a rel="license" href="https://linxianqin.gitee.io">知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议</a>进行许可，非商业转载请注明出处（作者，原文链接），商业转载请联系作者获得授权。</li>
    </ul>
</div>
<br/>



                        

<div class="post-archive">
    <h2>See Also</h2>
    <ul class="listing">
        
        <li><a href="/post/%E9%98%BF%E9%87%8C%E4%BA%91EasyExcel%E5%AE%9E%E7%8E%B0%E5%90%8E%E7%AB%AF%E5%AF%B9Excel%E7%9A%84%E8%AF%BB%E5%86%99%E6%93%8D%E4%BD%9C/">使用阿里云EasyExcel实现后端对Excel的读写操作</a></li>
        
        <li><a href="/post/%E9%98%BF%E9%87%8C%E4%BA%91oss%E5%AF%B9%E8%B1%A1%E5%AD%98%E5%82%A8%E6%9C%8D%E5%8A%A1%E5%AE%9E%E7%8E%B0/">阿里云oss对象存储服务实现</a></li>
        
        <li><a href="/post/%E9%98%9F%E5%88%97/">队列</a></li>
        
        <li><a href="/post/%E7%A8%80%E7%96%8F%E6%95%B0%E7%BB%84/">稀疏数组</a></li>
        
        <li><a href="/post/vue.js%E5%9F%BA%E6%9C%AC%E8%AF%AD%E6%B3%95/">Vue</a></li>
        
    </ul>
</div>


                        <div class="post-meta meta-tags">
                            
                            <ul class="clearfix">
                                
                                <li><a href="http://linxianqin.gitee.io/tags/%E9%98%BF%E9%87%8C%E4%BA%91">阿里云</a></li>
                                
                                <li><a href="http://linxianqin.gitee.io/tags/java">java</a></li>
                                
                                <li><a href="http://linxianqin.gitee.io/tags/vue">vue</a></li>
                                
                            </ul>
                            
                        </div>
                    </article>
                    
    

    
    
    <div class="post bg-white">
      <script src="https://utteranc.es/client.js"
            repo= "757610938/hugo-blogs-utterances"
            issue-term="pathname"
            theme="github-light"
            crossorigin="anonymous"
            async>
      </script>
    </div>
    
                </div>
            </div>
            <div id="secondary">
    <section class="widget">
        <form id="search" action="//www.google.com/search" method="get" accept-charset="utf-8" target="_blank" _lpchecked="1">
      
      <input type="text" name="q" maxlength="20" placeholder="Search">
      <input type="hidden" name="sitesearch" value="http://linxianqin.gitee.io">
      <button type="submit" class="submit icon-search"></button>
</form>
    </section>
    
    <section class="widget">
        <h3 class="widget-title">最近文章</h3>
<ul class="widget-list">
    
    <li>
        <a href="http://linxianqin.gitee.io/post/java-%E5%8F%8D%E5%B0%84/" title="Java 反射">Java 反射</a>
    </li>
    
    <li>
        <a href="http://linxianqin.gitee.io/post/java-%E9%93%BE%E8%A1%A8/" title="Java 链表">Java 链表</a>
    </li>
    
    <li>
        <a href="http://linxianqin.gitee.io/post/%E7%9F%AD%E4%BF%A1%E6%B3%A8%E5%86%8C%E5%92%8C%E5%BE%AE%E4%BF%A1%E7%99%BB%E5%BD%95%E7%9A%84%E5%AE%9E%E7%8E%B0/" title="短信注册和微信登录的实现">短信注册和微信登录的实现</a>
    </li>
    
    <li>
        <a href="http://linxianqin.gitee.io/post/OAuth2.0%E8%AE%A4%E8%AF%81%E6%8E%88%E6%9D%83%E5%8D%95%E7%82%B9%E7%99%BB%E5%BD%95/" title="OAuth2.0认证授权单点登录">OAuth2.0认证授权单点登录</a>
    </li>
    
    <li>
        <a href="http://linxianqin.gitee.io/post/Nacos%E6%9C%8D%E5%8A%A1%E6%B3%A8%E5%86%8C%E4%B8%AD%E5%BF%83/" title="Nacos服务注册中心">Nacos服务注册中心</a>
    </li>
    
    <li>
        <a href="http://linxianqin.gitee.io/post/SpringCloud%E5%BE%AE%E6%9C%8D%E5%8A%A1/" title="SpringCloud微服务">SpringCloud微服务</a>
    </li>
    
    <li>
        <a href="http://linxianqin.gitee.io/post/%E9%98%BF%E9%87%8C%E4%BA%91%E8%A7%86%E9%A2%91%E7%82%B9%E6%92%AD%E6%9C%8D%E5%8A%A1/" title="阿里云视频点播服务前后端实现">阿里云视频点播服务前后端实现</a>
    </li>
    
    <li>
        <a href="http://linxianqin.gitee.io/post/%E9%98%9F%E5%88%97/" title="队列">队列</a>
    </li>
    
    <li>
        <a href="http://linxianqin.gitee.io/post/%E7%A8%80%E7%96%8F%E6%95%B0%E7%BB%84/" title="稀疏数组">稀疏数组</a>
    </li>
    
    <li>
        <a href="http://linxianqin.gitee.io/post/%E9%98%BF%E9%87%8C%E4%BA%91EasyExcel%E5%AE%9E%E7%8E%B0%E5%90%8E%E7%AB%AF%E5%AF%B9Excel%E7%9A%84%E8%AF%BB%E5%86%99%E6%93%8D%E4%BD%9C/" title="使用阿里云EasyExcel实现后端对Excel的读写操作">使用阿里云EasyExcel实现后端对Excel的读写操作</a>
    </li>
    
</ul>
    </section>

    

    <section class="widget">
        <h3 class="widget-title">分类</h3>
<ul class="widget-list">
    
    <li><a href="http://linxianqin.gitee.io/categories/JWT/">JWT (2)</a></li>
    
    <li><a href="http://linxianqin.gitee.io/categories/hugo/">hugo (2)</a></li>
    
    <li><a href="http://linxianqin.gitee.io/categories/java/">java (18)</a></li>
    
    <li><a href="http://linxianqin.gitee.io/categories/java8/">java8 (1)</a></li>
    
    <li><a href="http://linxianqin.gitee.io/categories/springCloud/">springCloud (2)</a></li>
    
    <li><a href="http://linxianqin.gitee.io/categories/springSecurity/">springSecurity (4)</a></li>
    
    <li><a href="http://linxianqin.gitee.io/categories/vue/">vue (5)</a></li>
    
    <li><a href="http://linxianqin.gitee.io/categories/yml/">yml (1)</a></li>
    
    <li><a href="http://linxianqin.gitee.io/categories/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/">数据结构 (3)</a></li>
    
    <li><a href="http://linxianqin.gitee.io/categories/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95/">软件测试 (1)</a></li>
    
    <li><a href="http://linxianqin.gitee.io/categories/%E9%98%BF%E9%87%8C%E4%BA%91/">阿里云 (4)</a></li>
    
</ul>
    </section>

    <section class="widget">
        <h3 class="widget-title">标签</h3>
<div class="tagcloud">
    
    <a href="http://linxianqin.gitee.io/tags/JWT/">JWT</a>
    
    <a href="http://linxianqin.gitee.io/tags/hugo/">hugo</a>
    
    <a href="http://linxianqin.gitee.io/tags/java/">java</a>
    
    <a href="http://linxianqin.gitee.io/tags/java8/">java8</a>
    
    <a href="http://linxianqin.gitee.io/tags/spring/">spring</a>
    
    <a href="http://linxianqin.gitee.io/tags/springBoot/">springBoot</a>
    
    <a href="http://linxianqin.gitee.io/tags/springCloud/">springCloud</a>
    
    <a href="http://linxianqin.gitee.io/tags/ssm/">ssm</a>
    
    <a href="http://linxianqin.gitee.io/tags/vue/">vue</a>
    
    <a href="http://linxianqin.gitee.io/tags/yml/">yml</a>
    
    <a href="http://linxianqin.gitee.io/tags/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/">数据结构</a>
    
    <a href="http://linxianqin.gitee.io/tags/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95/">软件测试</a>
    
    <a href="http://linxianqin.gitee.io/tags/%E9%98%BF%E9%87%8C%E4%BA%91/">阿里云</a>
    
</div>
    </section>

    
<section class="widget">
    <h3 class="widget-title">友情链接</h3>
    <ul class="widget-list">
        
        <li>
            <a target="_blank" href="https://www.cnki.net" title="中国知网">中国知网</a>
        </li>
        
        <li>
            <a target="_blank" href="https://linxianqin.com" title="个人的另一个博客网站(国内加载慢)">个人的另一个博客网站(国内加载慢)</a>
        </li>
        
    </ul>
</section>


    <section class="widget">
        <h3 class="widget-title">其它</h3>
        <ul class="widget-list">
            <li><a href="http://linxianqin.gitee.io/index.xml">文章 RSS</a></li>
        </ul>
    </section>
</div>
        </div>
    </div>
</div>
<footer id="footer">
    <div class="container">
        &copy; 2020 <a href="http://linxianqin.gitee.io">林贤钦 By 林贤钦</a>.
        Powered by <a rel="nofollow noreferer noopener" href="https://gohugo.io" target="_blank">Hugo</a>.
        <a href="https://www.flysnow.org/" target="_blank">Theme</a> based on <a href="https://github.com/rujews/maupassant-hugo" target="_blank">maupassant</a>.
        
    </div>
</footer>


    
    <script type="text/javascript">
        
        (function () {
            $("pre code").parent().addClass("line-numbers")
        }());

        window.MathJax = {
            tex2jax: {
                inlineMath: [['$', '$']],
                processEscapes: true
                }
            };
    </script>
    <script type="text/javascript" src="/js/prism.js" async="true"></script>
    <script src='https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML' async></script>


<a id="rocket" href="#top"></a>
<script type="text/javascript" src="/js/totop.js?v=0.0.0" async=""></script>

<script type="application/javascript">
var doNotTrack = false;
if (!doNotTrack) {
	window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
	ga('create', 'GA ID', 'auto');
	
	ga('send', 'pageview');
}
</script>
<script async src='https://www.google-analytics.com/analytics.js'></script>



    <script type="text/javascript" src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js" async></script>




</body>
</html>
